package com.cskaoyan.javase.oop1._6constructor._4this;

import com.sun.xml.internal.ws.api.message.MessageWritable;

/**
 * this关键字在构造器中有两个用途:
 *      1.和成员方法中的this一样
 *      2.(专属于构造器的用途)
 *          this在构造器中,可以用来表示调用同类下的其它构造器
 *          语法:
 *          this(实参列表);
 *          根据实参列表的不同表示调用不同构造器
 *
 * 结论:
 *      1.构造器在一次new对象的过程中,是可能执行多次,多个的
 *      但是显式赋值只会执行一次,也必须执行一次,在构造器和默认初始化之间执行
 *
 *      2.(重点)构造器的作用不是创建对象,构造器的作用是赋值
 *          一次new对象,完全可以调用多个构造器
 *
 * this在表示调用构造器时,使用该语法的注意事项:
 *
 * this在表示调用构造器时,必须处在构造器代码的第一行,但是this在指向当前对象时,没有这个限制
 * this在表示调用构造器时,一个构造器中,最多用几次?
 * 最多用一次,因为要争第一行
 *
 * @since 10:59
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Animal a = new Animal(10, "120kg", "120");
    }
}

class Animal {
    int age = 8;
    String weight = "100kg";
    String height;

    public Animal() {
    }


    public Animal(String weight, String height) {
        // Call to 'this()' must be first statement in constructor body
        this.weight = weight;
        this.height = height;
        // this();
    }

    public Animal(int age, String weight, String height) {
        // this表示调用同类的双参构造器
        this(weight, height);
        this.age = age;
    }
}